/* ================================================================
*   Copyright (C) 2020 All rights reserved.
*
*   文件名称：xlock_util.h
*   创 建 者：xunmenglong
*   创建日期：2020年12月02日
*   描    述：跟锁操作相关的所有辅助函数
*
================================================================ */


#ifndef XLOCK_UTIL_H
#define XLOCK_UTIL_H

#include <pthread.h>
#include <bthread/bthread.h>

namespace xutil {

// 一个锁的辅助类, 在函数内定义, 函数退出之后会自动解锁
// 因为笔者大多服务都是跑在brpc上面的, 所以默认用的bthread对应的类
class LockUtil {
private:
    bthread_mutex_t * _lock;
public:
    LockUtil(bthread_mutex_t * lock) {
        _lock = lock;
        bthread_mutex_lock(_lock);
    }
    ~LockUtil() {
        bthread_mutex_unlock(_lock);
    }
};

// 同上, 只是是默认的<pthread>库的辅助类
class PLockUtil {
private:
    pthread_mutex_t * _lock;
public:
    PLockUtil(pthread_mutex_t * lock) {
        _lock = lock;
        pthread_mutex_lock(_lock);
    }
    ~PLockUtil() {
        pthread_mutex_unlock(_lock);
    }
};

} // namespace xutil

#endif
